package com.quectel.core.module.alarm.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author caolu
 * @email louis.cao@quectel.com
 * @date 2021-10-19 13:38:38
 */
@Data
@Schema
public class AlarmEventConfigDto implements Serializable {

    /**
     * ID
     */
    @Schema(description = "ID")
    private Long id;

    /**
     * 租户id
     */
    @Schema(description = "租户id")
    private Long tenantId;

    /**
     * 小区id
     */
    @Schema(description = "小区id")
    @NotNull
    private Long villageId;

    /**
     * 所属设备种类
     */
    @Schema(description = "所属设备种类")
    @NotNull
    private Long deviceCategoryId;
    /**
     * 所属设备种类名称
     */
    @Schema(description = "所属设备种类名称")
    private String deviceCategoryName;
    /**
     * 所属设备类型
     */
    @Schema(description = "所属设备类型")
    @NotNull
    private Long deviceTypeId;
    /**
     * 所属设备类型名称
     */
    @Schema(description = "所属设备类型名称")
    private String deviceTypeName;

    /**
     * 事件名称
     */
    @Schema(description = "事件名称")
    @NotEmpty
    @Length(min = 1, max = 80)
    private String name;

    /**
     * 0普通，1重要
     */
    @Schema(description = "0普通，1重要")
    @NotNull
    private Byte level;

    /**
     * 通知描述
     */
    @Schema(description = "通知描述")
    @NotEmpty
    @Length(min = 1, max = 80)
    private String eventDesc;

    /**
     * 规则触发条件1全部满足才触发2任意一个条件满足即触发
     */
    @Schema(description = "规则触发条件1全部满足才触发2任意一个条件满足即触发")
    @NotNull
    private Byte triggerType;

    /**
     * 告警规则多个id时以逗号隔开
     */
    @Schema(description = "告警规则多个id时以逗号隔开")
    @NotEmpty
    private String alarmRuleIds;

    /**
     * 同一个事件生成次数 1仅一次 2多次
     */
    @Schema(description = "同一个事件生成次数 1仅一次 2多次")
    @NotNull
    private Byte repeatType;

    /**
     * 生效时间范围00:00-23:59
     */
    @Schema(description = "生效时间范围00:00-23:59")
    @NotNull
    private String timeRangeRule;

    /**
     * 是否跟随告警自动关闭0:否1:是
     */
    @Schema(description = "是否跟随告警自动关闭0:否1:是")
    @NotNull
    private Byte isAutoClose;

    /**
     * 0关闭1开启
     */
    @Schema(description = "0关闭1开启")
    @NotNull
    private Byte status;

    /**
     * 是否自动生成工单1是0否
     */
    @Schema(description = "是否自动生成工单1是0否")
    @NotNull
    private Byte isAutoGenerateWorkOrder;

    /**
     * 处理人id
     */
    @Schema(description = "处理人id")
    private Long workOrderHandlerId;

    /**
     * 推送类型 短信/邮件等等 json数组
     */
    @Schema(description = "推送类型 短信/邮件等等 json数组")
    private String pushTypes;

    /**
     * 创建人
     */
    @Schema(description = "创建人")
    private String creator;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private Date createTime;

    /**
     * 修改人
     */
    @Schema(description = "修改人")
    private String editor;

    /**
     * 修改时间
     */
    @Schema(description = "修改时间")
    private Date editTime;

    /************非数据库字段 start ************/
    private String villageName;
    /**
     * 推送人的id
     */
    @Schema(description = "推送人的id")
    private List<Long> pushSysUserIds = new ArrayList<>();

    /**
     * 处理人姓名
     */
    @Schema(description = "处理人姓名")
    private String workOrderHandlerUsername;
    /**
     * 处理人姓名
     */
    @Schema(description = "处理人手机号")
    private String workOrderHandlerMobile;
    /**
     * 处理人姓名
     */
    @Schema(description = "处理人邮箱")
    private String workOrderHandlerEmail;


    @Schema(description = "告警规则")
    private List<AlarmRuleDto> alarmRuleDtoList;

    @Schema(description = "联动推送的地址")
    private String linkageUrl;

    /************非数据库字段 end **************/
}
